"""
 外观模式为子系统中的一组接口提供一个一致的界面，外观模式定义了一个高层的接口，这个接口使得这一子系统更加容易使用。外观模式下的角色有外观和子系统类，
 优点是：减少系统相互依赖，提高灵活性，提高了安全性。

角色：
    外观（facade）
    子系统类（subsystem classes）

其实就是：
    通过统一的类去实现某些方法，让外部看不到我们内部实现了什么方法
"""


# 外观（facade）
class CPU:
    def run(self):
        print("cpu开始运行")

    def stop(self):
        print("cpu停止")


# 外观（facade）
class Dist:
    def run(self):
        print("Disk开始运行")

    def stop(self):
        print("Disk停止")


# 外观（facade）
class Memory:
    def run(self):
        print("Memory开始运行")

    def stop(self):
        print("Memory停止")


# 子系统类（subsystem classes）
class Computer:
    def __init__(self, cpu, dist, memory):
        self.cpu = cpu
        self.dist = dist
        self.memory = memory

    def run(self):
        self.cpu.run()
        self.dist.run()
        self.memory.run()

    def stop(self):
        self.cpu.stop()
        self.dist.stop()
        self.memory.stop()


computer = Computer(CPU(), Dist(), Memory())
computer.run()
computer.stop()
